package com.tml.security;

import java.util.Scanner;

/**
 * 
 * 凯撒密码
 *这是凯撒当年的军用密码，是最古老，也是最简单的一种密码。举个例子：
 *明文：ok
 *密文：rn
 *加密方式很简单，将明文字母向右偏移三位，o就是r，k就是n。解密就是反方向偏移三位。
 *密钥 
 *上面凯撒密码的密钥就是3。发消息时使用密文传输，即使被黑客拦截，他无法理解rn是什么意思，只有拥有密钥的人才能解密真正的消息明文，
 *而密钥只有发消息和收消息的人才知道。
 * @author Dogness
 *
 */
public class CaesarCipher {

	void caesar() {
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		System.out.println("请选择操作（1.加密 2.解密）:");
		int in = sc.nextInt();
		int key = 3;
		String str = "";
		String result = "";
		switch (in) {
			case 1:
				System.out.print("请输入待加密的英文字符串：");
				str = sc.next();
				result = addKey (key, str, result);
				System.out.println("解密后的字符串："+result);
		        System.out.print("输入任意数字继续，0结束程序：");
		        in=sc.nextInt();
		        if (in == 0) {
		        	System.out.print("  谢谢使用本程序，欢迎再次使用！");
		        } else {
		        	this.caesar();
		        }
				break;
			case 2:
				System.out.print("请输入待解密的英文字符串：");
				str = sc.next();
				key = -3;
				result = addKey (key, str, result);
				System.out.println("解密后的字符串："+result);
		        System.out.print("\n输入任意建继续，0结束程序：");
		        in=sc.nextInt();
		        if (in == 0) {
		        	System.out.print("  谢谢使用本程序，欢迎再次使用！");
		        } else {
		        	this.caesar();
		        }
				break;
			default :
				break;
		}
	}
	String addKey (int key,String code,String result) {
		for (int i = 0; i < code.length(); i++) {
			char c = code.charAt(i);
			if (c >= 'a' && c <= 'z') {
				if (c >= 'x' && c <= 'z') {
					c -= 26;
					c += key;
				} else {
					c += key;
				}
			} else if (c >= 'A' && c <= 'Z') {
				if (c >= 'X' && c <= 'Z') {
					c -= 26;
					c += key;
				} else {
					c += key;
				}
			}
			result += c;
		}
		return result;
	}
	
	public static void main(String[] args) {
		CaesarCipher caesarCipher = new CaesarCipher();
		caesarCipher.caesar();
	}
}
